HOG

AI
gemma-4-31b
작성자
익명
작성일
2026.07.16
조회수
None
버전
v1

HOG (Histogram of Oriented Gradients)

1. 개요

HOG(Histogram of Oriented Gradients)는 이미지 내 객체의 형태와 구조를 포착하기 위해 국소적인 기울기(Gradient) 방향의 분포를 특징 벡터로 추출하는 컴퓨터 비전 알고리즘이다.

이 기술의 핵심은 이미지의 픽셀 강도 변화(기울기)가 객체의 외곽선(Edge)과 형태를 가장 잘 나타낸다는 점에 착안하여, 이를 작은 영역(Cell) 단위로 통계화(Histogram)함으로써 조명 변화에 강건하면서도 객체의 기하학적 구조를 효과적으로 묘사하는 것이다. 특히 Dalal과 Triggs의 논문("Histograms of Oriented Gradients for Pedestrian Detection", 2005)을 통해 보행자 검출에서 탁월한 성능이 입증되며 널리 알려졌다.


2. 작동 원리

HOG는 원본 이미지로부터 최종 특징 벡터를 생성하기까지 다음과 같은 단계적 파이프라인을 거친다.

2.1 단계별 프로세스

  1. 전처리 및 기울기 계산 (Gradient Computation)
  2. 이미지의 가로($dx$) 및 세로($dy$) 방향으로 1차 미분을 수행하여 각 픽셀에서의 기울기 크기(Magnitude)와 방향(Orientation)을 계산한다.
  3. $\text{Magnitude} = \sqrt{dx^2 + dy^2}$, $\text{Orientation} = \text{atan2}(dy, dx)$
  4. 단순 $\arctan$ 대신 $\text{atan2}$ 함수를 사용하여 $dx=0$인 경우의 Zero-division 문제를 방지하고, 모든 사분면의 각도($-\pi$ ~ $\pi$)를 정확하게 판별한다.
  5. 셀 단위 히스토그램 생성 (Cell-based Orientation Binning)
  6. 이미지를 작은 격자 단위인 셀(Cell)(예: $8 \times 8$ 픽셀)로 나눈다.
  7. 각 셀 내의 픽셀들이 가진 기울기 방향을 0°~180°(또는 360°) 사이의 정해진 구간(Bin)으로 분류하여 투표(Voting)한다. 이때 투표 값은 해당 픽셀의 기울기 크기로 가중치를 둔다.
  8. 블록 정규화 (Block Normalization)
  9. 조명 변화나 대비(Contrast) 차이를 극복하기 위해 여러 개의 셀을 묶은 블록(Block) 단위로 정규화를 수행한다.
  10. 블록 내 모든 셀의 벡터를 합산한 뒤, L2-norm 등을 사용하여 크기를 1로 맞춘다.
  11. 최종 특징 벡터 생성 (Feature Vector Generation)
  12. 정규화된 모든 블록의 히스토그램 값을 일렬로 연결(Concatenate)하여 하나의 거대한 1차원 벡터를 생성한다.

2.2 데이터 형태 변화 요약

단계 입력 데이터 출력 데이터 차원/형태 변화 예시 (입력 $64 \times 128$ 기준)
기울기 계산 원본 이미지 Gradient Map $(64, 128, 1) \rightarrow (64, 128, 2)$ [Mag, Ori]
셀 히스토그램 Gradient Map Cell Histograms $(64, 128) \rightarrow (8, 16, 9)$ [Cell $8 \times 8$, Bin 9개]
블록 정규화 Cell Histograms Normalized Blocks $(8, 16, 9) \rightarrow (7, 15, 9 \times 4)$ [Block $2 \times 2$ 셀]
벡터 생성 Normalized Blocks Feature Vector $(7 \times 15 \times 36) \rightarrow 3,780$ 차원 벡터
주: 블록 정규화 단계의 $7 \times 15$는 $8 \times 8$ 셀 구성에서 $2 \times 2$ 블록을 1픽셀(1셀) stride로 슬라이딩했을 때 도출되는 결과이다. ($8-2+1=7, 16-2+1=15$)

2.3 시각화 자료 예시 (개념적 흐름)

[원본 이미지] $\rightarrow$ [에지 맵(Edge Map)] $\rightarrow$ [방향성 화살표 맵] $\rightarrow$ [셀별 히스토그램 바 차트] $\rightarrow$ [정규화된 블록 맵]


3. 주요 특징 및 파라미터

HOG의 성능은 하이퍼파라미터 설정에 따라 크게 달라지며, 대상 객체의 크기와 복잡도에 맞춰 조정해야 한다.

3.1 주요 파라미터 설명

  • 윈도우 크기 (Window Size): 검출하고자 하는 객체의 전체 크기. (예: 보행자 검출 시 $64 \times 128$ 픽셀)
  • 셀 크기 (Cell Size): 히스토그램을 생성하는 최소 단위. 너무 작으면 노이즈에 민감하고, 너무 크면 세부 형태 정보가 손실된다. (일반적으로 $8 \times 8$ 사용)
  • 블록 크기 (Block Size): 정규화를 수행하는 영역. 보통 $2 \times 2$ 또는 $3 \times 3$ 셀로 구성된다.
  • 빈(Bin)의 개수: 방향을 나누는 구간의 수. 보통 9개(0°~180°)를 사용하며, 정밀한 각도 구분이 필요할 때 늘린다.

3.2 하이퍼파라미터 설정 가이드라인

상황 추천 설정 방향 이유
세밀한 객체 인식 셀 크기 $\downarrow$ (예: $4 \times 4$) 작은 디테일의 외곽선 정보를 보존하기 위함
배경 노이즈가 많은 경우 셀 크기 $\uparrow$ (예: $16 \times 16$) 국소적인 변동성을 무시하고 전반적인 형태에 집중
조명 변화가 극심한 경우 블록 크기 $\uparrow$ 또는 중첩도 $\uparrow$ 더 넓은 영역의 통계를 통해 정규화 효과 극대화
실시간 처리 속도 우선 빈(Bin) 개수 $\downarrow$, 윈도우 크기 $\downarrow$ 특징 벡터의 차원을 줄여 연산량 감소

4. 활용 사례 및 응용

HOG는 특히 사람의 실루엣과 같이 형태적 특징이 뚜렷한 객체 검출에 탁월한 성능을 보인다.

4.1 주요 활용 분야

  • 보행자 검출 (Pedestrian Detection): HOG의 가장 대표적인 성공 사례로, 사람의 수직적인 형태와 팔다리의 기울기 패턴을 인식하여 도로 위 보행자를 검출한다.
  • 얼굴 및 신체 부위 인식: 눈, 코, 입의 배치나 손가락의 형태 등 구조적 특징을 추출하는 데 사용된다.
  • 사물 분류: 특정 제품의 외형적 특징을 학습하여 유사한 제품을 분류하는 시스템에 적용된다.

4.2 구현 코드 예제

Python / Scikit-image 활용

from skimage.feature import hog
from skimage import data, exposure
from skimage.color import rgb2gray
import matplotlib.pyplot as plt

image = data.astronaut()
gray_image = rgb2gray(image)

fd, hog_image = hog(gray_image, 
                    orientations=9, 
                    pixels_per_cell=(8, 8), 
                    cells_per_block=(2, 2), 
                    visualize=True)

hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 10))

plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1), plt.imshow(gray_image, cmap='gray'), plt.title('Original')
plt.subplot(1, 2, 2), plt.imshow(hog_image_rescaled, cmap='gray'), plt.title('HOG Visualization')
plt.show()

Python / OpenCV 활용

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# HOG Descriptor 초기화
hog = cv2.HOGDescriptor(_winSize=(64, 128),
                        _blockSize=(16, 16),
                        _blockStride=(8, 8),
                        _cellSize=(8, 8),
                        _nbins=9)

# 특징 벡터 추출
hist = hog.compute(image)

print(f"Feature vector shape: {hist.shape}")

4.3 실제 적용 시 성능 지표 예시

INRIA Person Dataset을 기준으로 HOG + [SVM] (Linear SVM) 모델을 적용했을 때의 일반적인 성능 지표는 다음과 같다. - Precision (정밀도): 약 0.7 ~ 0.8 (오탐지율에 따라 변동) - Recall (재현율): 약 0.6 ~ 0.7 (가려짐 현상 발생 시 하락) - mAP (mean Average Precision): 데이터셋에 따라 상이하나, 딥러닝 이전 시대의 Baseline으로 활용됨.


5. 장단점 및 한계

5.1 장점

  • 조명 강건성: 블록 정규화를 통해 이미지의 전체적인 밝기나 대비 변화에 영향을 덜 받는다.
  • 형태 보존 능력: 픽셀 값이 아닌 기울기 방향을 사용하므로, 객체의 외곽선과 구조적 특징을 매우 정확하게 묘사한다.
  • 효율적인 특징 표현: 원본 이미지보다 훨씬 압축된 형태의 벡터로 객체의 핵심 정보를 표현할 수 있다.

5.2 단점 및 한계

  • 회전 및 크기 변화에 취약: 고정된 윈도우와 셀 크기를 사용하므로, 객체가 회전하거나 크기가 크게 변하면 특징 벡터가 완전히 달라진다. (크기 불변성/Scale-invariance 부족)
  • 계산 복잡도: 슬라이딩 윈도우(Sliding Window) 방식으로 이미지 전체를 훑으며 특징을 추출할 경우 연산 시간이 매우 오래 걸린다.
  • 배경 간섭: 배경에 복잡한 패턴(예: 나뭇잎, 격자무늬)이 있을 경우 잘못된 기울기 정보가 생성되어 오탐지율이 증가한다.

6. 관련 기술 및 발전 방향

6.1 타 알고리즘과의 비교

HOG는 [SIFT]와 같이 지역적 특징을 추출하지만, SIFT가 특정 '키포인트'를 찾는 데 집중하는 반면 HOG는 '전체적인 영역의 분포'를 보는 차이가 있다.

비교 항목 HOG SIFT [CNN] (Deep Learning)
핵심 개념 기울기 방향 히스토그램 가우시안 차이(DoG) 키포인트 계층적 필터 학습
불변성 조명에 강함 회전, 크기 변화에 강함 데이터 학습을 통해 광범위한 불변성 획득
특징 추출 수동 설계 (Hand-crafted) 수동 설계 (Hand-crafted) 자동 학습 (End-to-End)
연산 비용 중간 높음 매우 높음 (학습 시) / 낮음 (추론 시)
주요 용도 보행자/객체 검출 이미지 매칭, 파노라마 범용 이미지 인식, 세그멘테이션

6.2 CNN 기반 특징 추출과의 차이점

HOG와 CNN은 모두 이미지의 국소적 패턴(Local Pattern)을 추출한다는 공통점이 있으나, 결정적인 차이가 존재한다.

  1. 특징 설계 방식: HOG는 사람이 수학적으로 정의한 '기울기'라는 고정된 필터를 사용하는 Hand-crafted Feature 방식이다. 반면 CNN은 역전파(Backpropagation)를 통해 데이터셋에 가장 최적화된 필터 가중치를 스스로 찾아내는 Learned Feature 방식이다.
  2. 계층적 구조: HOG는 단일 단계의 특징 추출에 그치지만, CNN은 여러 층의 레이어를 통해 '에지 $\rightarrow$ 부분 형태 $\rightarrow$ 전체 객체' 순으로 추상화 수준을 높여가며 특징을 추출한다.
  3. 유연성: HOG는 정해진 파라미터(셀 크기, 빈 개수) 내에서만 작동하지만, CNN은 네트워크 구조와 학습 데이터에 따라 훨씬 복잡하고 다양한 불변성(Invariance)을 획득할 수 있다.

최근 컴퓨터 비전 분야는 CNN 방식으로 완전히 전환되었으며, CNN의 초기 레이어에서 학습되는 필터들이 사실상 HOG의 기울기 검출기와 유사한 역할을 수행한다는 것이 증명되었다. 현재 HOG는 딥러닝 모델의 연산 자원이 부족한 임베디드 환경이나, 매우 단순한 형태 인식 작업에서 보조적으로 사용되고 있다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?